/*******************************************************************************
  Name: assert.h
  Copyright: Kieran Foot 2009
  Author: Kieran Foot
  Date: 12/06/09 11:55
  Description: Standard C Assert header for MGOS
*******************************************************************************/

#include <_ansi.h>

#ifndef __ASSERT_H__
#define __ASSERT_H__

_BEGIN_STD_C

// Undefine assert if it already exists
#undef assert

#ifndef NDEBUG

    #undef __ASSERT_FUNC
    
    // IF CNU C++
    #if defined __cplusplus && defined __GNUC__ 
        #define __ASSERT_FUNC __PRETTY_FUNCTION__
        
    // IF C99
    #elif __STDC_VERSION__ >= 199901L 
        #define __ASSERT_FUNC __func__
        
    // Old CNU C versions
    #elif __GNUC__ >= 2 
        #define __ASSERT_FUNC __FUNCTION__
        
    // No function macro
    #else
        #define __ASSERT_FUNC ((char *) 0)
    #endif

    // Assert macro
    #define assert(__exp) ((__exp) ? (void)0 : __assert_function (__FILE__, __LINE__, \
						       __ASSERT_FUNC, #__exp))
						       
#else

#endif

_END_STD_C

#endif
